package br.com.odontosul.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletResponse;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;

import br.com.odontosul.atendimento.GeradorAtestado;
import br.com.odontosul.entity.Atendimento;
import br.com.odontosul.negocio.AtendimentoNegocio;

@Name("atendimentoAction")
@Scope(ScopeType.CONVERSATION)
public class AtendimentoAction {
	
	List<Atendimento> atendimentos = new ArrayList<Atendimento>();
	
	private Atendimento atendimento;
	
	public void recuperaTodosAtendimentos() throws SQLException{
		
		AtendimentoNegocio atendimentoNegocio = new AtendimentoNegocio();
		atendimentos = atendimentoNegocio.pesquisarTodosAtendimentos();
	}
	
	public void downloadAtendimento() throws IOException{

		GeradorAtestado geradorAtestado = new GeradorAtestado();
		File arquivoPdf = geradorAtestado.getArquivoPdf("atendimento.pdf");
		download(arquivoPdf);
		
		/*try {
			java.awt.Desktop desktop = java.awt.Desktop.getDesktop();
			desktop.open(arquivoPdf);
		} catch (Exception e) {
			// TODO: handle exception
		}*/
	}
	
	public void download(File arquivoPdf){
		FacesContext facesContext = FacesContext.getCurrentInstance();    
		  
        HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();    
        OutputStream os = null;    
        File fileGerado= new File(arquivoPdf.toString());  
          
        byte[] arquivoGerado= recuperaFileEmByte(fileGerado);  
        try {    
            os = response.getOutputStream();    
            response.setContentType("application/pdf");    
            response.setContentLength(arquivoGerado.length);    
            response.setHeader("Content-disposition","attachment; filename="+fileGerado.getName());  
            os.write(arquivoGerado);   
        } catch (Exception e) {    
            e.printStackTrace();    
        } finally{    
            try {    
                if(os != null){    
                    os.flush();    
                    os.close();    
                }    
                facesContext.responseComplete();    
            } catch (IOException e) {    
                e.printStackTrace();    
            }    
        }    
    } 
	
	 private byte[] recuperaFileEmByte(File inFile) {    
	        InputStream is = null;    
	        byte[] buffer = null;  
	        try {    
	            is = new FileInputStream(inFile);    
	            buffer = new byte[is.available()];    
	            is.read(buffer);    
	            is.close();    
	        } catch (FileNotFoundException e) {    
	            e.printStackTrace();    
	        } catch (IOException e) {    
	            e.printStackTrace();    
	        }    
	        return buffer;    
	    }  

	public Atendimento getAtendimento() {
		return atendimento;
	}

	public void setAtendimento(Atendimento atendimento) {
		this.atendimento = atendimento;
	}


	public List<Atendimento> getAtendimentos() {
		return atendimentos;
	}

	public void setAtendimentos(List<Atendimento> atendimentos) {
		this.atendimentos = atendimentos;
	}
	
}
